name: CI

on:
  push:
    branches: [main, release-*]
    paths-ignore: ['**.md', '**.png', '**.jpg', '**.svg', '**/docs/**']
  pull_request:
    branches: [ main, release-* ]
    paths-ignore: ['**.md', '**.png', '**.jpg', '**.svg', '**/docs/**']
  schedule:
    - cron: '0 4 * * *'

jobs:
  test:
    name: Test
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod

      - name: Build manager console assets
        run: |-
          make build-manager-console

      - name: Enable local IPv6
        run: |-
          sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
          sudo ip -6 addr add fd00::1/64 dev eth0
          sudo ip addr

      - name: Run Unit tests
        run: |-
          # switch to installed go
          sudo ln -sf `which go` `sudo which go`
          go version
          sudo go version
          sudo make test-coverage

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: ./coverage.txt
          flags: unittests

  build:
    name: Build
    timeout-minutes: 20
    runs-on: ubuntu-latest
    needs: [test]
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod

      - name: Setup QEMU
        uses: docker/setup-qemu-action@v3

      - name: Setup Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build manager console assets
        run: |-
          make build-manager-console

      - name: Build
        run: |-
          make build
